﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using br.com.SistemaChamados.Enum;
using br.com.SistemaChamados.Model.Common;
using br.com.SistemaChamados.Model;
using br.com.SistemaChamados.DAO;
using System.Data;

namespace br.com.SistemaChamados.Controller
{

    public class CityController
    {
        /// <summary>
        /// Método responsável por atualizar uma cidade
        /// </summary>
        /// <param name="city">A cidade a ser atualizada com as novas informações</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState updateCity(City city)
        {
            EnumCRUDState resultState = EnumCRUDState.SQL_NOTHING;
            try
            {
                resultState = CityDAO.updateCity(city);
            }
            catch (Exception ex)
            {
                resultState = EnumCRUDState.SQL_ERROR;
                throw ex;
            }
            return resultState;
        }

        /// <summary>
        /// Método responsável por trazer todas as cidades
        /// </summary>
        /// <returns>List - City</returns>
        public List<City> listCity()
        {
            List<City> listCity = null;
            try
            {
                listCity = CityDAO.listCity();
                if (listCity != null)
                {
                    return listCity;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Método responsável por trazer todas as cidades de um determinado estado
        /// </summary>
        /// <param name="state">O estado do qual se deseja obter as cidades</param>
        /// <returns>List - City</returns>
        public List<City> listCityByState(State state)
        {
            List<City> listCity = null;
            try
            {
                listCity = CityDAO.listCitiesByState(state.Id);
                if (listCity != null)
                {
                    return listCity;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception)
            {
                return null;
                throw;
            }
        }

        /// <summary>
        /// Método responsável por trazer uma determinada cidade
        /// </summary>
        /// <param name="city">A cidade com o Id preenchido que se deseja obter</param>
        /// <returns>City</returns>
        public City SelectCity(City city)
        {
            City newCity = null;
            try
            {
                newCity = CityDAO.SelectCity(city.Id);
                if (newCity != null)
                {
                    return newCity;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception)
            {
                return null;
                throw;
            }
        }

        /// <summary>
        /// Método responsável por deletar uma cidade
        /// </summary>
        /// <param name="city">A cidade a ser removida</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState deleteCity(City city)
        {
            EnumCRUDState resultState = EnumCRUDState.SQL_NOTHING;
            try
            {
                resultState = CityDAO.deleteCity(city);
            }
            catch (Exception ex)
            {
                resultState = EnumCRUDState.SQL_ERROR;
                throw ex;
            }
            return resultState;
        }

        /// <summary>
        /// Método responsável por adicionar uma cidade
        /// </summary>
        /// <param name="city">A cidade a ser adicionada</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState addCity(City city)
        {
            EnumCRUDState resultState = EnumCRUDState.SQL_NOTHING;         
            try
            {
                resultState = CityDAO.addCity(city);
            }
            catch (Exception ex)
            {
                resultState = EnumCRUDState.SQL_ERROR;
                throw ex;
            }
            return resultState;
        }

        public CityController()
        {

        }
    }
}